package tree.easy;

import tree.TreeNode;

import java.util.*;

/**
 * 501. 二叉搜索树中的众数
 */
public class findMode {
    public static void main(String[] args) {
        findMode f = new findMode();
        f.list.add(1);
        f.list.add(1);
        f.list.add(1);
        f.list.add(2);
        f.list.add(2);
        f.list.add(2);
        f.test();
    }

    public List<Integer> list = new ArrayList<>();

    public int[] findMode(TreeNode root) {
        if (root == null) {
            return null;
        }
        inorder(root);
        int s = 0;
        int maxNum = 1;
        int thisNum = 1;
        List<Integer> res = new ArrayList<>();
        for (int i = 1; i <= list.size(); i++) {
            if (i < list.size() && list.get(i).equals(list.get(s))) {
                thisNum++;
            } else {
                if (maxNum < thisNum) {
                    res.clear();
                    maxNum = thisNum;
                    res.add(list.get(s));
                } else if (maxNum == thisNum) {
                    res.add(list.get(s));
                }
                s = i;
                thisNum = 1;
            }
        }
        int[] re = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            re[i] = res.get(i);
        }
        return re;
    }

    public void inorder(TreeNode root) {
        if (root == null) {
            return;
        }
        inorder(root.left);
        list.add(root.val);
        inorder(root.right);
    }

    public void test() {
        int s = 0;
        int maxNum = 1;
        int thisNum = 1;
        List<Integer> res = new ArrayList<>();
        for (int i = 1; i <= list.size(); i++) {
            if (i < list.size() && list.get(i).equals(list.get(s))) {
                thisNum++;
            } else {
                if (maxNum < thisNum) {
                    res.clear();
                    maxNum = thisNum;
                    res.add(list.get(s));
                } else if (maxNum == thisNum) {
                    res.add(list.get(s));
                }
                s = i;
                thisNum = 1;
            }
        }
        System.out.println(res);
    }
}
